// 定义函数是可以有参数也可以有多个参数，可以有返回值也可以无返回值
function a(){
  console.log(1);
}

// : void 代表该函数没有任何返回值的意思
// 定义的是一个无参数无返回值的函数
// : 冒号后面的是返回值类型
function fn1(): void{}
const aaa:()=>void = function(){}

// 具有一个字符串类型的返回值
function fn2(): string { return '' }

// 定义一个返回值是对象的函数
function fn3(): {
  name:string
  age: number
} {
  return {
    name: '涛涛',
    age: 38
  }
}

interface iObj {
  name: string
  age: number
}
function fn4(): iObj{
  return {
    name: '涛涛',
    age: 38
  }
}

// 定义一个返回值是固定的内容
type tDir = '东' | '南' | '西' | '北'
function fn5(): tDir{
  return '东'
}

// 返回 一个数组类型的内容
function fn6(): Array<number | string>{
  return [1,2,3]
}
function fn7(): number[]{
  return [1,2,3]
}

// -------------------------------------------------
// 带参数的函数定义

// 定义一个带有两个参数的函数
function fn8(a: number, b?: any): void{}

// 带有默认值参数，且有一个返回值 的函数
function fn9(a: any, b: number = 10): number{
  return a + b
}


/*
  fn10 是变量的名称  冒号后面的是变量的类型 该变量是一个 无参数无返回值的函数类型
  等号是一个赋值符号，后面的函数就是一个无参数无返回值的函数
  将这个函数赋值给 fn10
*/
const fn10:() => void = function():void { }
// 带有一个返回值是 number 类型的函数
const fn11:() => number = function(): number {
  return 1
}

const fn12:(a:number) => number = function(a:number):number {
  return 1
}



interface iObj {
  name: string
  age: number
}
const fn13:(a: number)=> iObj = function(a:number): iObj{
  return {
    name: '涛涛',
    age: 18
  }
}


